/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import DataTypes.DataEvento;
import DataTypes.DataGrupo;
import Hndlr.HndlrGrupo;
import Interfaces.ICtrlDetallesGrupo;
import enums.EnumAprob;
import enums.enumRol;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import objetos.Contenido;
import objetos.Grupo;
import objetos.Rol;

/**
 *
 * @author Sebas
 */
public class CtrlDetallesGrupo implements ICtrlDetallesGrupo {

    @Override
    public DataGrupo detallarGrupo(String clave) {
        HndlrGrupo hGrupo = HndlrGrupo.getInstance();
        Grupo gru = hGrupo.obtenerGrupo(clave);
        DataGrupo grupo = new DataGrupo(gru.getNombre(), gru.getDesc(), gru.getCantParticipantes(), gru.getImg(), gru.getFechaCreacion(), gru.getMuro().getDataMuro(), gru.getDataEventos(), gru.getRoles());
        return grupo;
    }

    @Override
    public ArrayList<DataGrupo> listarGrupos() {

        HndlrGrupo HGr = HndlrGrupo.getInstance();

        return HGr.listarGrupos();

    }

    @Override
    public ArrayList<Rol> listarRolUsuariosGrupo(String nomGrupo) {
        ArrayList<Rol> lista = new ArrayList<Rol>();

        HndlrGrupo hGrupo = HndlrGrupo.getInstance();
        Iterator<Rol> itera = hGrupo.obtenerGrupo(nomGrupo).getUsr().iterator();

        while (itera.hasNext()) {

            lista.add(itera.next());

        }

        return lista;
    }

    @Override
    public HashMap<String, DataEvento> listarCalendarioEventos(String nomGrup) {

        HndlrGrupo hGrupo = HndlrGrupo.getInstance();

        return hGrupo.listarCalendarioEventos(nomGrup);
    }

    @Override
    public boolean esUsrModeradorGrupo(String grupo, String mailUsr) {
        if (!HndlrGrupo.getInstance().PerteneceMiembroAgrupo(mailUsr, grupo)) {
            return false;
        } else {
            return (HndlrGrupo.getInstance().obtenerGrupo(grupo).obtenerRol(mailUsr).getRolUsr() == enumRol.MODERADOR);
        }
    }

    @Override
    public boolean esUsrCreadorGrupo(String grupo, String mailUsr) {
        if (!HndlrGrupo.getInstance().PerteneceMiembroAgrupo(mailUsr, grupo)) {
            return false;
        } else {
            return (HndlrGrupo.getInstance().obtenerGrupo(grupo).obtenerRol(mailUsr).getRolUsr() == enumRol.CREADOR);
        }
    }

    @Override
    public void bloquearContenido(String grupo, String tituloCont) {
        ArrayList<Contenido> listCont = null;
        boolean seEncontro = false;

        listCont = HndlrGrupo.getInstance().obtenerGrupo(grupo).getMuro().getContenidosObjeto();

        Iterator<Contenido> itera = listCont.iterator();
        Contenido cont = null;
        while (itera.hasNext() && !seEncontro) {
            cont = itera.next();
            if (cont.getTitulo().equals(tituloCont)) {
                cont.setBloqueado(true);
                seEncontro = true;
            }
        }
    }

    @Override
    public void aprobarContenido(String grupo, String tituloCont, boolean aprobar) {
        ArrayList<Contenido> listCont = null;
        boolean seEncontro = false;

        listCont = HndlrGrupo.getInstance().obtenerGrupo(grupo).getMuro().getContenidosObjeto();

        Iterator<Contenido> itera = listCont.iterator();
        Contenido cont = null;
        while (itera.hasNext() && !seEncontro) {
            cont = itera.next();
            if (cont.getTitulo().equals(tituloCont)) {
                if (aprobar) {
                    cont.setAprobacion(EnumAprob.APROBADO);
                    cont.setPublicar(false); //Usuario debe publicar contenido.
                } else {
                    cont.setAprobacion(EnumAprob.NO_APROBADO);
                }
                seEncontro = true;
            }
        }
    }

    @Override
    public void publicarContenido(String grupo, String tituloCont) {
        ArrayList<Contenido> listCont = null;
        boolean seEncontro = false;

        listCont = HndlrGrupo.getInstance().obtenerGrupo(grupo).getMuro().getContenidosObjeto();

        Iterator<Contenido> itera = listCont.iterator();
        Contenido cont = null;
        while (itera.hasNext() && !seEncontro) {
            cont = itera.next();
            if (cont.getTitulo().equals(tituloCont)) {
                cont.setPublicar(true);
                seEncontro = true;
            }
        }
    }

    @Override
    public String rolUsrGrupo(String grupo, String correoUsr) {
        DataGrupo dg = detallarGrupo(grupo);
        Iterator<String> itera = null;
        boolean seEncontro = false;
        String result = null;

        if (dg.getCreador().equals(correoUsr)) {
            seEncontro = true;
            result = "CREADOR";
        }
        if (!seEncontro) {
            itera = dg.getModeradores().iterator();
            while (itera.hasNext() && !seEncontro) {
                if (itera.next().equals(correoUsr)) {
                    seEncontro = true;
                    result = "MODERADOR";
                }
            }
        }
        if (!seEncontro) {
            itera = dg.getParticipantes().iterator();
            while (itera.hasNext() && !seEncontro) {
                if (itera.next().equals(correoUsr)) {
                    seEncontro = true;
                    result = "PARTICIPANTE";
                }
            }
        }
        if (!seEncontro) {
            result = "NO PERTENECE";
        }

        return result;

    }
}
